﻿using Pe.Petecos.Comercial.Aplicacion.Core.Base;
using Pe.Petecos.Comercial.Aplicacion.TransferObject.Ventas;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Pe.Petecos.Comercial.Aplicacion.Core.ServiceContract
{
    public interface IVentasService : IGenericService
    {
        #region Evento
        ProcessResult<List<DataEvento>> BuscarEvento(FiltroEvento filtro);
        ProcessResult<DataEvento> ObtenerEvento(int codigo);
        ProcessResult<DataEvento> RegistrarEvento(DataEvento evento);
        ProcessResult<List<int>> ModificarEstadoEvento(List<int> codigos, string estado, string usuario);
        ProcessResult<DataEvento> CopiarEvento(int codigo, string usuario);
        ProcessResult<string> EnviarEvento(int codigo, string estado);
        ProcessResult<List<DataEventoDetalle>> BuscarEventoDetalle(int codigoEvento, int codigoProveedor = 0);
        ProcessResult<byte[]> GenerarDocumentoEvento(int codigo, string formato);
        #endregion

        #region Proyecto
        ProcessResult<List<DataProyecto>> BuscarProyecto(FiltroProyecto filtro);
        ProcessResult<DataProyecto> ObtenerProyecto(int codigo);
        ProcessResult<DataProyecto> RegistrarProyecto(DataProyecto evento);        
        ProcessResult<List<DataProyectoDetalle>> BuscarProyectoDetalle(int codigoProyecto, int codigoProveedor = 0);
        ProcessResult<List<DataProyectoDetalle>> BuscarProyectoDetallexOC(int codigoProyecto, int codigoProveedor = 0);
        ProcessResult<List<int>> ModificarEstadoProyecto(List<int> codigos, string estado, string usuario);
        ProcessResult<string> EnviarProyecto(int codigo, string estado);
        ProcessResult<byte[]> GenerarDocumentoProyecto(int codigo, string formato);
        ProcessResult<string> ValidarItemsProyecto(int codigoProyecto, int codigoArticuloProveedor = 0);
        #endregion

        #region Orden de Compra
        ProcessResult<List<DataOrdenCompra>> BuscarOrdenCompra(FiltroOrdenCompra filtro);
        ProcessResult<DataOrdenCompra> ObtenerOrdenCompra(int codigo);
        ProcessResult<DataOrdenCompra> RegistrarOrdenCompra(DataOrdenCompra ordenCompra);
        ProcessResult<List<int>> ModificarEstadoOrdenCompra(List<int> codigos, string estado, string usuario);
        ProcessResult<DataOrdenCompra> CopiarOrdenCompra(int codigo, string usuario);
        ProcessResult<string> EnviarOrdenCompra(int codigo, string estado);
        ProcessResult<byte[]> GenerarDocumentoOrdenCompra(int codigo, string formato);
        #endregion

        #region Comprobante Pago
        ProcessResult<List<DataComprobantePago>> BuscarComprobantePago(FiltroComprobantePago filtro);
        ProcessResult<DataComprobantePago> ObtenerComprobantePago(int codigo);
        ProcessResult<DataComprobantePago> RegistrarComprobantePago(DataComprobantePago comprobantePago);
        ProcessResult<List<int>> ModificarEstadoComprobantePago(List<int> codigos, string estado, string usuario);
        ProcessResult<byte[]> GenerarDocumentoComprobantePago(int codigo);
        #endregion

        #region Gasto Personal Proyecto
        ProcessResult<List<DataGastoPersonalProyecto>> BuscarGastoPersonalProyecto(FiltroGastoPersonalProyecto filtro);
        ProcessResult<DataGastoPersonalProyecto> ObtenerGastoPersonalProyecto(int codigo);
        ProcessResult<DataGastoPersonalProyecto> RegistrarGastoPersonalProyecto(DataGastoPersonalProyecto gastoPersonalProyecto);
        ProcessResult<List<int>> ModificarEstadoGastoPersonalProyecto(List<int> codigos, string estado, string usuario);
        ProcessResult<byte[]> GenerarDocumentoGastoPersonalProyecto(int codigo);
        #endregion
    }
}
